# 对均衡数据进行随机过采样，以满足目标1的数据要求
import pandas as pd
import numpy as np

# 假设你的数据存储在一个DataFrame中
data = pd.read_csv('no_neg_DBSCAN_adasyn_g2.csv')

# 定义特征和标签
X = data.drop(['Air Quality'], axis=1)
y = data['Air Quality']

# 指定要过采样的类别和过采样条数
target_classes = ['Poor', 'Hazardous']
oversampling_counts = [800, 1000]

# 过采样后的数据集
X_res = X.copy()
y_res = y.copy()

# 对每个目标类别进行过采样
for target_class, oversampling_count in zip(target_classes, oversampling_counts):
    # 获取目标类别的索引
    target_indices = y[y == target_class].index

    # 如果目标类别的样本数少于过采样条数，则报错
    if len(target_indices) < oversampling_count:
        raise ValueError(f"Not enough samples in the {target_class} class to oversample to the specified count.")

    # 随机选择过采样条数的样本
    oversampling_indices = np.random.choice(target_indices, size=oversampling_count, replace=True)

    # 过采样
    X_over = X.loc[oversampling_indices].copy()
    y_over = y.loc[oversampling_indices].copy()

    # 将过采样的数据添加到原始数据中
    X_res = pd.concat([X_res, X_over])
    y_res = pd.concat([y_res, y_over])

# 合并特征和标签
resampled_data = pd.concat([X_res, y_res], axis=1)

# 将过采样后的数据保存到新的CSV文件
resampled_data.to_csv('resampled_data_g1.csv', index=False)
